package com.yt.order.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.yt.order.models.dto.WorkOrderInfoDTO;
import com.yt.order.models.service.IAutoDispatchService;
import com.yt.order.models.service.IWorkOrderInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 自动派单调度服务
 * 定时检查未分配订单并启动自动分配流程
 */
@Slf4j
@Service
public class AutoDispatchSchedulerService {

    @DubboReference
    private IWorkOrderInfoService workOrderInfoService;

    @DubboReference
    private IAutoDispatchService autoDispatchService;

    /**
     * 每5分钟执行一次，检查未分配订单并启动自动分配
     * cron表达式: "0 0/5 * * * ?" 表示每5分钟执行一次
     */
    @Scheduled(cron = "0 0/5 * * * ?")
    public void checkAndDispatchUnassignedOrders() {
        try {
            log.info("开始执行定时任务：检查未分配订单并启动自动分配");

            // 查询所有状态为0（待分配）的订单
            EntityWrapper<WorkOrderInfoDTO> wrapper = new EntityWrapper<>();
            wrapper.eq("status", 0);
            List<WorkOrderInfoDTO> unassignedOrders = workOrderInfoService.selectList(wrapper);

            if (unassignedOrders.isEmpty()) {
                log.info("没有找到未分配的订单");
                return;
            }

            log.info("找到 {} 个未分配的订单，开始执行自动分配", unassignedOrders.size());

            // 对每个未分配订单启动自动分配流程
            for (WorkOrderInfoDTO order : unassignedOrders) {
                try {
                    log.info("开始为订单ID: {} 启动自动分配", order.getId());
                    autoDispatchService.handleOrderCreated(order.getId());
                } catch (Exception e) {
                    log.error("为订单ID: {} 启动自动分配时发生异常", order.getId(), e);
                }
            }

            log.info("定时任务执行完成，共处理 {} 个未分配订单", unassignedOrders.size());
        } catch (Exception e) {
            log.error("执行定时任务检查未分配订单时发生异常", e);
        }
    }
}